package com.spring.hotel.common.utils;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;

import java.sql.Types;
import java.util.Collections;
public class CodeGen {
    public static void main(String[] args) {
        // 数据库配置信息
        String url = "jdbc:mysql://localhost:3306/finance?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "jtc31995";
        //表名
        String TableName = "assessment";
        // 当前项目路径
        String currentPath = "C:\\Users\\HP\\IdeaProjects\\springboot_finance";
        String codeOutputDir = currentPath + "/src/main/java";
        // mapperXml 生成路径
        String mapperXmlPath = currentPath + "/src/main/resources/mapper";
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    // 设置作者
                    builder.author("whl")
                            // 开启 swagger 模式
                            .enableSwagger()
                            // 指定输出目录
                            .outputDir(codeOutputDir);
                })
                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                    if (typeCode == Types.SMALLINT) {
                        return DbColumnType.INTEGER;
                    }
                    return typeRegistry.getColumnType(metaInfo);
                }))
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent("com.spring")
                            // 设置父包模块名
                            .moduleName("springboot_finance")
                            // pojo 实体类包名
                            .entity("entity")
                            // Service 包名
                            .service("service")
                            // ***ServiceImpl 包名
                            .serviceImpl("service.impl")
                            // Mapper 包名
                            .mapper("mapper")
                            // Mapper XML 包名
                            .xml("mapper.xml")
                            // Controller 包名
                            .controller("controller")
                            // 设置 mapperXml 生成路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, mapperXmlPath));
                })
                .strategyConfig(builder -> {
                    // 设置需要生成的表名
                    builder.addInclude(TableName)
                            // 设置过滤表前缀
                            .addTablePrefix("t_", "sys_")
                    // Entity 配置
                            .entityBuilder()
                            // 开启 lombok 模型
                            .enableLombok()
                    // Controller 配置
                            .controllerBuilder()
                            // 开启生成 @RestController 控制器
                            .enableRestStyle()
                            // 覆盖已生成文件
                            .enableFileOverride()
                    // Service 配置
                            .serviceBuilder()
                    // Mapper 配置
                            .mapperBuilder();
                })
//                // 默认的是 Velocity引擎模板
//                .templateEngine(new FreemarkerTemplateEngine())
                .templateConfig(builder -> {
                    builder.entity("/templates/entity.java") // 指定自定义模板路径，注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
                            .build(); // 指定模板
                    builder.controller("/templates/myController.java") // 指定自定义模板路径，注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
                            .build(); // 指定模板
                })
                .execute();
    }
}